#include "util.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include <stdio.h>

#define TAG "util"

// 打印所有任务CPU占用率
void print_task_cpu_usage()
{
    // 分配足够的缓冲区来存储运行时间统计信息
    // 通常每个任务需要约40个字符，假设最多有20个任务
    char *buffer = heap_caps_malloc(40 * 20, MALLOC_CAP_INTERNAL);
    if (buffer == NULL) {
        ESP_LOGE(TAG, "Failed to allocate memory for CPU usage stats");
        return;
    }
    
    // 调用函数获取运行时间统计
    vTaskGetRunTimeStats(buffer);
    
    // 打印统计信息
    ESP_LOGI(TAG, "Task CPU Usage Stats:\n%s", buffer);
    
    // 释放缓冲区
    free(buffer);
}

// 打印每个任务的堆栈使用情况
void print_task_stack_usage()
{
    // 分配足够的缓冲区来存储任务列表信息
    // 通常每个任务需要约40个字符，假设最多有20个任务
    char *buffer = heap_caps_malloc(40 * 20, MALLOC_CAP_INTERNAL);
    if (buffer == NULL) {
        ESP_LOGE(TAG, "Failed to allocate memory for task list");
        return;
    }
    
    // 调用函数获取任务列表
    vTaskList(buffer);
    
    // 打印任务列表
    ESP_LOGI(TAG, "Task List:\nTaskName\tStatus\tPrio\tHWM\tTaskNum\n%s", buffer);
    
    // 释放缓冲区
    free(buffer);
}